home *** CD-ROM | disk | FTP | other *** search
/ Aminet 39 / Aminet 39 (2000)(Schatztruhe)[!][Oct 2000].iso / Aminet / gfx / misc / Splitmpeg.lha / Splitmpeg / src / stream.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-07-22  |  4.5 KB  |  152 lines

  1. /*
  2.  * Copyright (c) 1994 Michael Simmons.
  3.  * All rights reserved.
  4.  *
  5.  * Permission to use, copy, modify, and distribute this software and its
  6.  * documentation for any purpose, without fee, and without written agreement is
  7.  * hereby granted, provided that the above copyright notice and the following
  8.  * two paragraphs appear in all copies of this software.
  9.  *
  10.  * IN NO EVENT SHALL MICHAEL SIMMONS BE LIABLE TO ANY PARTY FOR
  11.  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  12.  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF MICHAEL SIMMONS
  13.  * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  14.  *
  15.  * THE MICHAEL SIMMONS SPECIFICALLY DISCLAIMS ANY WARRANTIES,
  16.  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  17.  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  18.  * ON AN "AS IS" BASIS, AND MICHAEL SIMMONS HAS NO OBLIGATION TO
  19.  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  20.  *
  21.  * I can be contacted via
  22.  * Email: michael@ecel.uwa.edu.au
  23.  * Post: P.O. Box 506, NEDLANDS WA 6009, AUSTRALIA
  24.  *
  25.  * Amigaversion by Tobias Seiler in 1997
  26.  * Email: tabs@blader.com
  27.  */
  28.  
  29. /* MPEG Stream Constants */
  30.  
  31. /* Start codes. */
  32.  
  33. #define PICTURE_START_CODE       0x00000100
  34. #define SLICE_MIN_START_CODE     0x00000101
  35. #define SLICE_MAX_START_CODE     0x000001af
  36. #define RESERVED_START_CODE_1    0x000001b0
  37. #define RESERVED_START_CODE_2    0x000001b1
  38. #define USER_START_CODE          0x000001b2
  39. #define SEQ_START_CODE           0x000001b3
  40. #define EXT_START_CODE           0x000001b5
  41. #define RESERVED_START_CODE_3    0x000001b6
  42. #define SEQ_END_CODE             0x000001b7
  43. #define GOP_START_CODE           0x000001b8
  44. #define ISO_11172_END_CODE       0x000001b9
  45. #define PACK_START_CODE          0x000001ba
  46. #define SYSTEM_HEADER_START_CODE 0x000001bb
  47. #define RESERVED_STREAM          0x000001bc
  48. #define PRIVATE_STREAM_1         0x000001bd
  49. #define PADDING_STREAM           0x000001be
  50. #define PRIVATE_STREAM_2         0x000001bf
  51. #define AUDIO_STREAM_0           0x000001c0
  52. #define AUDIO_STREAM_31          0x000001df
  53. #define VIDIO_STREAM_0           0x000001e0
  54. #define VIDIO_STREAM_15          0x000001ef
  55. #define RESERVED_DATA_STREAM_0   0x000001f0
  56. #define RESERVED_DATA_STREAM_15  0x000001ff
  57.  
  58. /* other stuff */
  59. #define MAX_NUM_STREAMS  43
  60.  
  61. /* Picture_coding_type */
  62.  
  63. #define I_TYPE  1
  64. #define P_TYPE  2
  65. #define B_TYPE  3
  66. #define D_TYPE  4
  67.  
  68. /* Macros used with macroblock address decoding. */
  69.  
  70. #define MB_STUFFING  34
  71. #define MB_ESCAPE    35
  72.  
  73. /* Special values for DCT Coefficients */
  74. #define END_OF_BLOCK  62
  75. #define ESCAPE        61
  76.  
  77. /* Audio */
  78.  
  79. #define AUDIO_HEADER_SYNC  0xfff
  80.  
  81. #define LAYER_I        3
  82. #define LAYER_II       2
  83. #define LAYER_III      1
  84. #define LAYER_RESERVED 0
  85.  
  86. #define SAMPLE_FREQ_44  0
  87. #define SAMPLE_FREQ_48  1
  88. #define SAMPLE_FREQ_32  2
  89. #define SAMPLE_FREQ_RESERVED 3
  90.  
  91. #define MODE_STEREO         0
  92. #define MODE_JOINT_STEREO   1
  93. #define MODE_DUAL_CHANNEL   2
  94. #define MODE_SINGLE_CHANNEL 3
  95.  
  96. #define EMPHASIS_NONE       0
  97. #define EMPHASIS_50_15      1
  98. #define EMPHASIS_RESERVED   2
  99. #define EMPHASIS_CCITTJ17   3
  100.  
  101. typedef struct {
  102.   FILE   *stream;
  103.   unsigned int STD_scale;  /*  1 bit  */
  104.   unsigned int STD_size;  /* 13 bits */
  105.   unsigned int PTS_hibit;  /*  1 bit  */
  106.   unsigned int PTS;   /* 32 bits */
  107.   unsigned int DTS_hibit;  /*  1 bit  */
  108.   unsigned int DTS;   /* 32 bits */
  109. }
  110. StreamInfo;
  111.  
  112. typedef struct {
  113.   unsigned int SCR_hibit;  /*  1 bit  */
  114.   unsigned int SCR;   /* 32 bits */
  115.   unsigned int mux_rate;  /* 22 bits */
  116. }
  117. Pack_Header;
  118.  
  119. typedef struct {
  120.   unsigned int header_length; /* 16 bits  */
  121.   unsigned int rate_bound;  /* 22 bits  */
  122.   unsigned int audio_bound; /*  6 bits  */
  123.   unsigned int fixed_flag;  /*  1 bit   */
  124.   unsigned int CSPS_flag;  /*  1 bit   */
  125.   unsigned int audio_lock_flag;/*  1 bit   */
  126.   unsigned int video_lock_flag;/*  1 bit   */
  127.   unsigned int video_bound; /*  5 bits  */
  128.   unsigned int reserved_byte; /*  8 bits  */
  129.   unsigned int STD_flag[MAX_NUM_STREAMS];
  130.   unsigned int STD_scale_bound[MAX_NUM_STREAMS];
  131.   unsigned int STD_size_bound[MAX_NUM_STREAMS];
  132. }
  133. System_Header;
  134.  
  135. typedef struct {
  136.   unsigned int stream_id;  /*  8 bits  */
  137.   unsigned int packet_length; /* 16 bits  */
  138.   unsigned int STD_flag;  /*  1 bit   */
  139.   unsigned int STD_scale;  /*  1 bit   */
  140.   unsigned int STD_size;  /* 13 bits  */
  141.   unsigned int PTS_Flag;  /*  1 bit   */
  142.   unsigned int PTS_hibit;  /*  1 bit   */
  143.   unsigned int PTS;   /* 32 bits  */
  144.   unsigned int DTS_Flag;  /*  1 bit */
  145.   unsigned int DTS_hibit;  /*  1 bit   */
  146.   unsigned int DTS;   /* 32 bits  */
  147.   unsigned int buffer_size;
  148.   char   *buffer;
  149. }
  150. Packet;
  151.  
  152.